package tool

/*
  @Description: 定义解析app.json配置信息的工具，读入app.json并将解析完成，
已经赋好属性值得结构体进行返回

*/
import (
	"bufio"
	"encoding/json"
	"fmt"
	"os"
)

//定义解析app.json配置信息的工具
type Config_Json struct {
	AppName     string         `json:"app_name"`
	AppIP       string         `json:"app_ip"`
	AppPort     string         `json:"app_port"`
	AppMode     string         `json:"app_mode"`
	Sms         Sms_Json       `json:"sms"`
	Database    DatabaseConfig `json:"database"`
	RedisConfig RedisConfig    `json:"redis_config"`
	Mqtt        MqttConfig     `json:"mqtt"`
}
type Sms_Json struct {
	Sign_name    string `json:"sign_name"`
	Templatecode string `json:"template_code"`
	Appkey       string `json:"app_key"`
	Appsecret    string `json:"app_secret"`
	Region_id    string `json:"region_id"`
}
type DatabaseConfig struct {
	Driver   string `json:"driver"`
	User     string `json:"user"`
	Password string `json:"password"`
	Host     string `json:"host"`
	Port     string `json:"port"`
	DbName   string `json:"db_name"`
	Charset  string `json:"charset"`
	ShowSql  bool   `json:"show_sql"`
}
type RedisConfig struct {
	Addr     string `json:"addr"`
	Port     string `json:"port"`
	Password string `json:"password"`
	Db       int    `json:"db"`
}
type MqttConfig struct {
	Host string `json:"host"`
	Port int    `json:"port"`
}

var Confing *Config_Json = nil //设一个结构体的空指针

func ConfigJsonReader(path string) (*Config_Json, error) {
	file, err := os.Open(path)
	if err != nil {
		panic(err.Error())
	}
	defer file.Close() //最后执行完后记得关闭file
	reader := bufio.NewReader(file)
	decoder := json.NewDecoder(reader)

	if err = decoder.Decode(&Confing); err != nil { //一种预防的机制
		fmt.Println(err.Error())
		return nil, err
	}

	return Confing, nil //现在已经在结构体中赋好了值

}
func Getconfig() *Config_Json {

	return Confing //将已经完成初始化的配置文件返回

}
